perm filename WAVES.FAI[MUS,LCS] blob
sn#318213 filedate 1977-11-14 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00008 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE WAVES
C00007 00003 L101: SETOM X#
C00009 00004 L6: JSA 16,DPYOUT
C00014 00005 ININT: SETZ
C00015 00006 GNAME: SETZM FILEXT+1
C00016 00007 GETNAM: MOVEI A,
C00017 00008 DSKIN: MOVE NN,[INPO: IOWD =1024,WD]
C00018 ENDMK
C⊗;
TITLE WAVES
EXTERNAL TYPLOC,DDCLR,DPYSET
EXTERNAL DPYOUT,AVECT,ALINE
;*** TO LOAD ***** LOA WAVES,%LTVRLIB *******
;******** DDCLR IS IN TVRLIB.REL *******
A←1 ↔ B←2 ↔ C←3 ↔ D←5 ↔ K←4 ↔ NN←7 ↔ LPDL←←69 ↔ P←17
E←6 ↔ DUR←15 ↔ SKP←11
BEG: MOVE P,[-LPDL,,PDL-1]
JSA 16,TYPLOC
[-=260]
[-=512]
TRYOV: CLRBFI
OUTSTR [ASCIZ/ TYPE FILE NAME(<CR>=TEST.SND) /]
move [SIXBIT/DSK/]
MOVEM DEVNAM
PUSHJ P,GNAME
OPEN 11,[17
DEVNAM: 0
0]
JRST 4,.
LOOKUP 11,FILNAM
JRST TRYOV
INHDR: MOVE A,[INPHD: IOWD =128,WD]
MOVEI A+1,0
INPUT 11,A
TYPIT: HRRZ B,2(A) ;THE SAMPLE RATE
SRT: FLTR B,B
HRRZ C,3(A) ; BITS/SMPL
MOVEM C,BITS# ;0=12 1=18
MOVE D,4(A) ; NCHNS
MOVE E,5(A)
CAML E,[=500000] ;IS IT FLOATING?
KIFIX E,E ; YES, FIX IT.
MOVEM E,MAXAMP# ;MAXAMP
MOVE DUR,6(A) ;DURATION
MOVEM E,DURX#
OUTSTR [ASCIZ/
SRATE =/]
MOVEM B,FSRATE#
KIFIX B
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ BITS =/]
IMULI C,=18
SKIPN C
MOVEI C,=12
MOVE C
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ NCHNS =/]
MOVEM D,NCHNS#
MOVE D
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ MAXAMP =/]
MOVE E
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ SMPLS =/]
MOVE DUR
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ 100*DUR=/]
KIFIX B,FSRATE
MOVE DUR
IMULI =100
IDIV D
IDIV B
PUSHJ P,OUTINT
SKIPN DUR
MOVE DUR,[=20000000] ;IN CASE 0 DURATION IN HEADER
HRRZI A,=512
HRRZM A,INC#
MOVEI 0,1
MOVEM 0,INCX# ;INCREMENT THROUGH FILE. 1 OR 2
SOJ D, ;NCHNS
MOVEM D,NCHNX# ;0=MONO, 1=CH1, 2=CH2
JUMPE D,L8
AOS INCX ; MAKE INCREMENT 2 NOW
OUTSTR [ASCIZ/
TYPE CHANNEL NUM. /]
INCHWL B
PUSHJ P,ININT
SKIPE ;<CR>=CHAN.1
SOJ
MOVEM 0,NCHNX ;ADD 0 FOR CH1. ADD 1 FOR CH2.
L8: CLRBFI
OUTSTR [ASCIZ/
TYPE NUM OF SAMPLES (<CR>=512) AND SKIP NUMBER. /]
HRRZI A,=1024
HRRZM A,NEXT#
INCHWL B
PUSHJ P,ININT
MOVEI 1,=3072
MOVE 2,NCHNS
CAIE 2,1
IDIVI 1,2
MOVEM 1,XXX# ;A BUFFER SIZE (3072 OR 1536 FOR STEREO)
CAMLE 1 ;WON'T DISPLAY MORE THAN 3072 SMPLS AT A TIME.
MOVE 1 ;AC1 HAS 3072 OR 1536(STEREO)
JINC: MOVEM J#
SETZ
INCHRS B
CAIA
PUSHJ P,ININT
SETZM SKP
JUMPE 0,INCR ;NO SKIP AHEAD
MOVEI A,3
SUB A,BITS
MOVEM A,BDIV# ;BIT DIVIDER
IDIV 0,BDIV
MOVE SKP,0 ;SKP HAS NUM OF WDS TO SKIP
SETZ 0,
SKIPA
SLOOP: PUSHJ P,DSKIN ;THROW AWAY A BUFFER FULL
ADDI 0,=1024
MOVEM 0,NEXT
CAMG 0,SKP
JRST SLOOP ;GO BACK IF MORE TO THROW AWAY
SUBI 0,=1024
IMUL 0,BDIV ;SKP NOW HAS NUM OF SMPLS SKIPPED.
EXCH SKP,0
INCR: SKIPE B,J
MOVEM B,INC
MOVE A,NCHNX ;GET THE INCREMENT NUM.
ADD A,SKP
MOVEM A,JCNT#
AOJ A,
MOVEM A,KCNT#
SETZM JZ#
L11: HRRZI A,1
HRRZM A,L#
MOVE A,INC
MOVEM A,LX#
L100: PUSHJ P,DSKIN
MOVEI 0,=1024
ADDM 0,NEXT ;FOR LATER SKIP AHEAD
L101: SETOM X#
SETZ K,
MOVEI =3073
SUB NCHNS
MOVEM COMPAR# ;FOR LOOP BELOW
MOVE A,[POINT 12,WD]
L2: SKIPE WD(K)
SETZM X
ILDB 0,A
HRRZM 0,FW(K)
ILDB 0,A
HRRZM 0,FW+1(K)
ILDB 0,A
HRRZM 0,FW+2(K)
ADDI K,3
CAIGE K,=3072
JRST L2
; SKIPE X ADD THIS TO RESTART ON ZEROS
; JRST L8
L1: JSA 16,DDCLR
MOVE A,[=1000.0]
MOVE 10,INC
IDIV 10,NCHNS
FLTR B,10
FDVR A,B
MOVEM A,X
L40: JSA 16,DPYSET
[1]
DP
[=4000]
JSA 16,ALINE
NFHD
[=409]
NFHD
[-=409]
JSA 16,ALINE
[=500]
ZER
NFHD
ZER
L10: MOVE A,[-=500.0]
MOVEM A,Z#
MOVE K,L
ADD K,NCHNX ;ADDS 0 OR 1 (FOR STEREO)
L4: MOVE INCX
ADDM JCNT
CAMGE DUR,JCNT
JRST L6 ;END OF SAMPLES, GO DPY IT.
MOVE A,FW-1(K)
CAILE A,=2047
SUBI A,=4096
MOVEM A,JZ
IDIVI A,5
MOVEM A,JY#
KIFIX A,Z
MOVEM A,JX#
JSA 16,AVECT
JX
JY
CAML K,COMPAR
JRST L6
MOVE A,X
FADM A,Z
ADD K,INCX ;ADDS 1 OR 2(STEREO)
CAMG K,LX
JRST L4
L6: JSA 16,DPYOUT
[1]
CAMLE DUR,JCNT ;EXIT IF COUNTER EXCEEDS NUM. SMPLS.
JRST L31
SETZM INC
OUTSTR [ASCIZ/ ******* END OF SAMPLES ******* /]
L31: MOVE NCHNS
CAIN 1
JRST L32
MOVE NCHNX
JUMPN L32-1
OUTSTR [ASCIZ/ CH.1 /]
SKIPA
OUTSTR [ASCIZ/ CH.2 /]
L32: OUTSTR [ASCIZ/ SMPL /]
MOVE KCNT
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ TO /]
MOVE JCNT
PUSHJ P,OUTINT
OUTSTR [ASCIZ/
/]
L55: MOVE A,J
AOJ A,
JUMPE A,L7
AOJ A,
JUMPE A,L12
L5: CLRBFI
INCHWL B
PUSHJ P,ININT
MOVEM J
SETZ
INCHRS B
CAIA
PUSHJ P,ININT
IMUL NCHNS ;BY 1 OR 2
MOVEM NX
MOVE A,XXX
CAMGE A,J
MOVEM A,J
L77: SKIPLE A,J
MOVEM A,INC
ADDI A,2
JUMPGE A,L7
JRST L9
L12: MOVE A,L
ADD A,NX#
MOVEM A,LX
MOVE A,KCNT
ADD A,NX
SOJ A,
MOVEM A,JCNT
JRST L7
L9: MOVE A,L
ADD A,J
MOVEM A,LX
MOVE A,KCNT
ADD A,J
SOJ A,
MOVEM A,JCNT
SKIPGE LX
SETZM LX
L7: MOVE A,LX
AOJ A,
MOVEM A,L
MOVE A,INC
ADDM A,LX
MOVE A,JCNT
AOJ A,
MOVEM A,KCNT
MOVE A,L
CAILE A,=3072
JRST L11
JRST L1
ININT: SETZ
SETZ C,
CAIN B,"-"
JRST MIN
RECUR: CAIL B,60
CAILE B,71
JRST SYNE
IMULI =10
ADDI -60(B)
GTCHR: INCHRS B
CAIA
JRST RECUR
SYNE: SKIPGE C
MOVNS
POPJ P,
MIN: SETO C,
JRST GTCHR
OUTINT: HRRZI B,7 ;16
JUMPE OUTZ
IDIVI =10
ADDI A,60
HRRZM A,BLK1(B)
SOJGE B,OUTINT+1
OCHR: OUTCHR BLK1+1(B)
CAIGE B,6 ;15
AOJA B,OCHR
POPJ P,
OUTZ: CAIL B,7 ;16
HRLZI B,300000
JRST OCHR
INA5: SETZ A,
HRLZI C,700
INCHWL
CAIE 15
CAIN 12
POPJ P,
IDPB C
TRNN A,177
INCHRS
POPJ P,
JRST .-7
GNAME: SETZM FILEXT+1
SETZM FILPPN
MOVE A,['SND ']
MOVEM A,FILEXT
PUSHJ P,GETNAM
SKIPN A
MOVE A,['TEST ']
CAIE C,":" ;CHECK FOR DEVICE NAME
JRST GEXT ;NO
MOVEM A,DEVNAM ;YES, DEV. NAME
JRST GNAME+2 ;GO BACK AND LOOK FOR FILE NAME.
GEXT: MOVEM A,FILNAM
CAIE C,"."
JRST NOEXTN
PUSHJ P,GETNAM
MOVEM A,FILEXT
NOEXTN: CAIE C,"["
JRST FFDX
PUSHJ P,GETP
HRLZM A,FILPPN
PUSHJ P,GETP
HRRM A,FILPPN
FFDX: INCHRW C
CAIE C,12
JRST FFDX
POPJ P,
GETNAM: MOVEI A,
MOVE B,[440600,,A]
GETNML: PUSHJ P,RCH
POPJ P,
SUBI C,40
TLNE B,770000
IDPB C,B
JRST GETNML
GETP: MOVEI A,
GETPL: PUSHJ P,RCH
POPJ P,
TRNE A,770000
JRST GETPL
LSH A,6
ADDI A,-40(C)
JRST GETPL
RCH: INCHWL C
CAIN C,42
JRST RCHQ
CAIE C,11
CAIN C," "
JRST RCH
CAIN C,":" ;LOOK FOR DEVICE NAME
POPJ P,
CAIE C,"."
CAIN C,","
POPJ P,
CAIE C,"["
CAIN C,"]"
POPJ P,
RCHQR: CAIGE C,40
POPJ P,
CAIL C,"a"
CAILE C,"z"
CAIA
SUBI C,40
POPJ1: AOS (P)
POPJ P,
RCHQ: INCHWL C
JRST RCHQR
DSKIN: MOVE NN,[INPO: IOWD =1024,WD]
MOVEI NN+1,0
INPUT 11,NN
POPJ P,
FILNAM: 0
FILEXT: 0
0
FILPPN: 0
BLK1: BLOCK 17
DP: 0
WD: BLOCK =1024
FW: BLOCK =1024*3
NFHD: -=500
ZER: 0
PDL: BLOCK LPDL
END BEG